package solutions.ferpa.ztest.intf;

import br.com.telescope.adsrt.lib.*;
import br.com.telescope.t2.AccessPolicy;
import br.com.telescope.t2.ServiceModel;
import br.com.telescope.t2.exception.ApplicationRuntimeException;
import br.com.telescope.t2.feature.CustomFeature;
import br.com.telescope.util.HashUtil;
import solutions.ferpa.ztest.ent.*;

/**
 * Criar usuário administrador.
 * <p>
 * Interface utilizada durante o processo de implantação para criar o 
 * primeiro usuário (administrador) no sistema.
 * <P>
 * Esta interface pode ser chamada a qualquer instante. Se não houver 
 * nenhum usuário criado, ela cria um usuário chamado "administrador" com 
 * a senha "administrador". Se já existirem usuários criados, ela não 
 * cria nenhum usuário e apenas apresenta uma mensagem dizendo que já 
 * existem usuários criados.
 * <P>
 * 
 * <P>
 * Esta interface também não é encontrada em nenhum menu e deve ser 
 * chamada diretamente por sua URL.
 * <P>
 * 
 * <P>
 * Telescope origin: RTAUTH_UTIL.UTL_CRIAR_ADMIN
 * <P>
 * @author TELESCOPE - Build task T2 Web Interface Generator
 * <P>
 * @version 0.1
 */
public class UtlCriarAdmin extends ServiceModel {
    
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    public static final String GLOBAL_NAME = "RTAUTH_UTIL.UTL_CRIAR_ADMIN";
    
    @Override
    public String globalName() {
        return GLOBAL_NAME;
    }
    
    {
        setTitle("Criar usuário administrador");
    }
    
    
    // Record items
    
    // Query items
    
    @Override
    public void initAttributes() {
        
    }
    
    @Override
    public String getDefaultOrderBy() {
        return "";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="CUSTOM">
    public class FCustom extends CustomFeature {
        
        @Override
        public void initForm() {
        }
        
        @Override
        public int getAccessPolicy() {
            return AccessPolicy.PUBLIC;
        }
        
        @Override
        public void posDisplay() {
            try {
                criarPrimeiroUsuario();
            } catch (AdsException ex) {
                throw new ApplicationRuntimeException(ex);
            }
        }
        
        {
            setFeatureName("CUSTOM");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="initFeatures">
    
    @Override
    protected void initFeatures() {
        addFeature(new FCustom());
        super.initFeatures();
    }
    
    @Override
    public String getDefaultFeature() {
        return "CUSTOM";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Getters and Setters">
    // </editor-fold>
    
    /**
     * Criar primeiro usuário.
     * <p>
     * Se não existir nenhum usuário cadastrado, cria automaticamente um 
     * usuário com login "administrador" e senha "administrador".
     * <P>
     */
    private void criarPrimeiroUsuario() throws AdsException {
        // <user-code id="10591587" parentId="800889" hashcode="5b65675f" length="440">
        // import br.com.telescope.util.HashUtil;
        if (ctx.computeSqlValue("select count(1) from usuarios").equals("0")) {
            EntUsuarios adm = new EntUsuarios(ctx);
            adm.setLogin("administrador");
            //adm.setSenha("administrador");
            adm.setSenhaHash(HashUtil.getSha1("administrador"));
            adm.setSuperUsuario("S");
            adm.ins();
            ctx.p("Criado usuário administrador!");
        } else {
            ctx.p("Já existem usuários criados!");
        }
        // </user-code>
    }
}
